package com.wicket.okrframework.integration.dto;

import com.wicket.okrframework.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
import java.util.Objects;
import lombok.Data;

@Data
public class BaseMetadataObjectPropertyDto
  extends BaseDto
  implements Serializable {

  /**
   * 对象属性ID:
   */
  @ApiModelProperty("对象属性ID")
  private String objectPropertyId;

  /**
   * 对象属性标识:
   */
  @ApiModelProperty("对象属性标识")
  private String objectPropertyCode;

  /**
   * 对象属性别名:
   */
  @ApiModelProperty("对象属性别名")
  private String objectPropertyAlias;

  /**
   * 业务对象ID:
   */
  @ApiModelProperty("业务对象ID")
  private String businessObjectId;

  /**
   * 业务对象编码:
   */
  @ApiModelProperty("业务对象编码")
  private String businessObjectCode;

  /**
   * 对象属性名称:
   */
  @ApiModelProperty("对象属性名称")
  private String objectPropertyName;

  /**
   * 对象属性类型:
   */
  @ApiModelProperty("对象属性类型")
  private String objectPropertyTypeCode;

  /**
   * 是否枚举字段:
   */
  @ApiModelProperty("是否枚举字段")
  private String isEnumeration;

  /**
   * 是否状态:
   */
  @ApiModelProperty("是否状态")
  private String isStatus;

  /**
   * 是否主键:
   */
  @ApiModelProperty("是否主键")
  private String isPrimaryKey;

  /**
   * 字段更新是否前端显示:
   */
  @ApiModelProperty("字段更新是否前端显示")
  private String isRecordVersion;

  /**
   * 排序:
   */
  @ApiModelProperty("排序")
  private Long orderNumber;

  /**
   * 操作人就职记录ID:
   */
  @ApiModelProperty("操作人就职记录ID")
  private String operationInductionId;

  /**
   * 操作时间:
   */
  @ApiModelProperty("操作时间")
  private Date operateTime;

  /**
   * 主体生命周期:
   */
  @ApiModelProperty("主体生命周期")
  private String subjectLifeCycle;

  /**
   * 是否存档:
   */
  @ApiModelProperty("是否存档")
  private String isArchive;

  /**
   * 是否推送前端缓存 TRUE:是 FALSE:否
   */
  @ApiModelProperty("是否推送前端缓存")
  private String isPushCache;

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    if (!super.equals(o)) return false;
    BaseMetadataObjectPropertyDto that = (BaseMetadataObjectPropertyDto) o;
    return (
      objectPropertyId == that.objectPropertyId &&
      objectPropertyCode == that.objectPropertyCode &&
      objectPropertyAlias == that.objectPropertyAlias &&
      businessObjectId == that.businessObjectId &&
      businessObjectCode == that.businessObjectCode &&
      objectPropertyName == that.objectPropertyName &&
      objectPropertyTypeCode == that.objectPropertyTypeCode &&
      isEnumeration == that.isEnumeration &&
      isStatus == that.isStatus &&
      isPrimaryKey == that.isPrimaryKey &&
      isRecordVersion == that.isRecordVersion &&
      orderNumber == that.orderNumber &&
      operationInductionId == that.operationInductionId &&
      operateTime == that.operateTime &&
      subjectLifeCycle == that.subjectLifeCycle &&
      isArchive == that.isArchive &&
      isPushCache == that.isPushCache
    );
  }

  @Override
  public int hashCode() {
    return Objects.hash(
      super.hashCode(),
      objectPropertyId,
      objectPropertyCode,
      objectPropertyAlias,
      businessObjectId,
      businessObjectCode,
      objectPropertyName,
      objectPropertyTypeCode,
      isEnumeration,
      isStatus,
      isPrimaryKey,
      isRecordVersion,
      orderNumber,
      operationInductionId,
      operateTime,
      subjectLifeCycle,
      isArchive,
      isPushCache
    );
  }
}
